package com.dongwu.common.utils;

import com.gexin.fastjson.JSONObject;
import com.gexin.rp.sdk.base.IPushResult;
import com.gexin.rp.sdk.base.impl.AppMessage;
import com.gexin.rp.sdk.base.impl.SingleMessage;
import com.gexin.rp.sdk.base.impl.Target;
import com.gexin.rp.sdk.exceptions.RequestException;
import com.gexin.rp.sdk.http.IGtPush;
import com.gexin.rp.sdk.template.LinkTemplate;
import com.gexin.rp.sdk.template.NotificationTemplate;
import com.gexin.rp.sdk.template.style.Style0;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;



public class AppPush {

	// 定义常量, appId、appKey、masterSecret 采用本文档 "第二步 获取访问凭证 "中获得的应用配置
	private static String appId = "2B2AVYn3Fl6rPzE064Zwd9";
	private static String appKey = "Z8xu8Jas0H98F6eUxoz1K9";
	private static String masterSecret = "5UhfyxBnfl9JY2LWOZXIn9";
	private static String url = "http://sdk.open.api.igexin.com/apiex.htm";
	static String CID = "4f0d546c4a0e4913d76c999566565081";

	public static void pushToAll() throws IOException {

		IGtPush push = new IGtPush(url, appKey, masterSecret);

		// 定义"点击链接打开通知模板"，并设置标题、内容、链接
		LinkTemplate template = new LinkTemplate();
		template.setAppId(appId);
		template.setAppkey(appKey);
		template.setTitle("欢迎使用个推!");
		template.setText("这是一条推送消息~");
		template.setUrl("http://getui.com");

		List<String> appIds = new ArrayList<String>();
		appIds.add(appId);

		// 定义"AppMessage"类型消息对象，设置消息内容模板、发送的目标App列表、是否支持离线发送、以及离线消息有效期(单位毫秒)
		AppMessage message = new AppMessage();
		message.setData(template);
		message.setAppIdList(appIds);
		message.setOffline(true);
		message.setOfflineExpireTime(1000 * 600);

		IPushResult ret = push.pushMessageToApp(message);
		System.out.println(ret.getResponse().toString());
	}
    
	
	public static void pushToSingle(String clientId,int type,String userName,String messageId) throws Exception {
		// https连接
		IGtPush push = new IGtPush(appKey, masterSecret, true);
		// 此处true为https域名，false为http，默认为false。Java语言推荐使用此方式
		// IGtPush push = new IGtPush(host, appkey, master);
		// host为域名，根据域名区分是http协议/https协议
		NotificationTemplate template = notificationTemplateDemo(type, userName,messageId);
		SingleMessage message = new SingleMessage();
		message.setOffline(true);
		// 离线有效时间，单位为毫秒，可选
		message.setOfflineExpireTime(24 * 3600 * 1000);
		message.setData(template);
		message.setPushNetWorkType(0); // 可选，判断是否客户端是否wifi环境下推送，1为在WIFI环境下，0为不限制网络环境。
		Target target = new Target();
		target.setAppId(appId);
		target.setClientId(clientId);
		// 用户别名推送，cid和用户别名只能2者选其一
		// String alias = "个";
		// target.setAlias(alias);
		IPushResult ret = null;
		try {
			ret = push.pushMessageToSingle(message, target);
		} catch (RequestException e) {
			e.printStackTrace();
			ret = push.pushMessageToSingle(message, target, e.getRequestId());
		}
		if (ret != null) {
			System.out.println(ret.getResponse().toString());
		} else {
			System.out.println("服务器响应异常");
		}
	}

	public static NotificationTemplate notificationTemplateDemo(int type,String userName,String messageId) {
		NotificationTemplate template = new NotificationTemplate();
		// 设置APPID与APPKEY
		template.setAppId(appId);
		template.setAppkey(appKey);
		Style0 style = new Style0();
		Map<String, Object> content = new HashMap<>();
		Map<String, Object> payload = new HashMap<>();
		if (type == 1) {
			// 设置通知栏标题与内容
			style.setTitle("审核通过");
			style.setText("尊敬的"+userName+"先生/女士，您在我行办理的普惠金融(百合)卡审核通过！");
			// 配置通知栏图标
			style.setLogo("icon.png");
			// 配置通知栏网络图标，填写图标URL地址
			style.setLogoUrl("");
			content.put("title", "审核通过");
			content.put("content", "尊敬的"+userName+"先生/女士，您在我行办理的普惠金融(百合)卡审核通过！");
			payload.put("messageId",messageId);
			content.put("payload", payload);
		}
		if (type == 3) {
			// 设置通知栏标题与内容
			style.setTitle("人工审核失败");
			style.setText("尊敬的"+userName+"先生/女士，您在我行办理的普惠金融(百合)卡审核失败！");
			// 配置通知栏图标
			style.setLogo("icon.png");
			// 配置通知栏网络图标，填写图标URL地址
			style.setLogoUrl("");
			content.put("title", "人工审核失败");
			content.put("content", "尊敬的"+userName+"先生/女士，您在我行办理的普惠金融(百合)卡审核失败！");
			payload.put("messageId",messageId);
			content.put("payload", payload);
		}if (type == 4) {
			// 设置通知栏标题与内容
			style.setTitle("身份证信息有误");
			style.setText("尊敬的"+userName+"先生/女士，您在我行办理的普惠金融(百合)卡的身份证信息填写有误，请重新申请！");
			// 配置通知栏图标
			style.setLogo("icon.png");
			// 配置通知栏网络图标，填写图标URL地址
			style.setLogoUrl("");
			content.put("title", "身份证信息有误");
			content.put("content", "尊敬的"+userName+"先生/女士，您在我行办理的普惠金融(百合)卡的身份证信息填写有误，请重新申请！");
			payload.put("messageId",messageId);
			content.put("payload", payload);
		}if (type == 5) {
			// 设置通知栏标题与内容
			style.setTitle("等待分配营销人员");
			style.setText("尊敬的"+userName+"先生/女士，您在我行办理的普惠金融(百合)卡正在分配人员上门处理！");
			// 配置通知栏图标
			style.setLogo("icon.png");
			// 配置通知栏网络图标，填写图标URL地址
			style.setLogoUrl("");
			content.put("title", "等待分配营销人员");
			content.put("content", "尊敬的"+userName+"先生/女士，您在我行办理的普惠金融(百合)卡正在分配人员上门处理！");
			payload.put("messageId",messageId);
			content.put("payload", payload);
		}if (type == 6) {
			// 设置通知栏标题与内容
			style.setTitle("已分配人员到现场处理");
			style.setText("尊敬的"+userName+"先生/女士，您在我行办理的普惠金融(百合)卡已经分配人员上门处理，届时会通过电话联系！");
			// 配置通知栏图标
			style.setLogo("icon.png");
			// 配置通知栏网络图标，填写图标URL地址
			style.setLogoUrl("");
			content.put("title", "已分配人员到现场处理");
			content.put("content", "尊敬的"+userName+"先生/女士，您在我行办理的普惠金融(百合)卡已经分配人员上门处理，届时会通过电话联系！");
			payload.put("messageId",messageId);
			content.put("payload", payload);
		}if (type == 7) {
			// 设置通知栏标题与内容
			style.setTitle("等待总行批复");
			style.setText("尊敬的"+userName+"先生/女士，您在我行办理的普惠金融(百合)卡已提交到总行审批！");
			// 配置通知栏图标
			style.setLogo("icon.png");
			// 配置通知栏网络图标，填写图标URL地址
			style.setLogoUrl("");
			content.put("title", "等待总行批复");
			content.put("content", "尊敬的"+userName+"先生/女士，您在我行办理的普惠金融(百合)卡已提交到总行审批！");
			payload.put("messageId",messageId);
			content.put("payload", payload);
		}
		// 设置通知是否响铃，震动，或者可清除
		style.setRing(true);
		style.setVibrate(true);
		style.setClearable(true);
		template.setStyle(style);

        // 透传消息设置，1为强制启动应用，客户端接收到消息后就会立即启动应用；2为等待应用启动
        template.setTransmissionType(2);
        
        JSONObject json=new JSONObject(content); 
        System.out.println(json.toJSONString());
        template.setTransmissionContent(json.toJSONString());
		return template;
	}

}
